package syg._04_activiti_task;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.activiti.engine.task.Task;
import org.junit.Test;

import java.util.List;

/**
 * 完成任务
 * @author SYG
 */
public class _02_Complete {

    /**
     * 完成个人任务
     *
     * ACT_HI_TASKINST  在历史的任务表中插入一条下一个待执行的任务
     * ACT_HI_ACTINST   在流程实例执行历史表中插入下一个待执行的任务
     * ACT_HI_IDENTITYLINK  在历史表中插入下一个任务的参与者
     * ACT_RU_TASK  插入下一个待执行的任务
     * ACT_RU_IDENTITYLINK  在当前正在运行的任务插入下一个任务的参与者
     * ACT_RU_EXECUTION
     * ACT_HI_ACTINST  更新上一个任务的结束时间
     * ACT_HI_TASKINST 更新上一个任务的结束时间
     */
    @Test
    public void test1() {
        // 1,获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 2,获取TaskService,因为要完成task,所以需要获取TaskService
        TaskService taskService = processEngine.getTaskService();
        // 3,根据任务id完成任务(这个就是张员工的那个任务)
        taskService.complete("30005");
    }

    /**
     * 完成张经理的审批
     */
    @Test
    public void test2() {
        // 1,获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 2,因为要查询待处理的任务,所以需要获取TaskService
        TaskService taskService = processEngine.getTaskService();
        // 3,获取待处理的任务
        List<Task> list = taskService.createTaskQuery()
                // 哪个流程下的待处理任务,所以需要传入流程key
                .processDefinitionKey("myEvection")
                // 谁待处理的任务,所以需要传入待办人
                .taskAssignee("张经理")
                // 待办的任务可能有多个
                .list();
        // 4,根据任务id完成任务
        for (Task task : list) {
            taskService.complete(task.getId());
        }
    }

    /**
     * 完成张总经理的审批
     */
    @Test
    public void test3() {
        // 1,获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 2,因为要查询待处理的任务,所以需要获取TaskService
        TaskService taskService = processEngine.getTaskService();
        // 3,获取待处理的任务
        List<Task> list = taskService.createTaskQuery()
                // 哪个流程下的待处理任务,所以需要传入流程key
                .processDefinitionKey("myEvection")
                // 谁待处理的任务,所以需要传入待办人
                .taskAssignee("张总经理")
                // 待办的任务可能有多个
                .list();
        // 4,根据任务id完成任务
        for (Task task : list) {
            taskService.complete(task.getId());
        }
    }
    /**
     * 完成张财务的审批
     */
    @Test
    public void test4() {
        // 1,获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 2,因为要查询待处理的任务,所以需要获取TaskService
        TaskService taskService = processEngine.getTaskService();
        // 3,获取待处理的任务
        List<Task> list = taskService.createTaskQuery()
                // 哪个流程下的待处理任务,所以需要传入流程key
                .processDefinitionKey("myEvection")
                // 谁待处理的任务,所以需要传入待办人
                .taskAssignee("张财务")
                // 待办的任务可能有多个
                .list();
        // 4,根据任务id完成任务
        for (Task task : list) {
            taskService.complete(task.getId());
        }
    }
}
